package com.taxshare.seller.service;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.taxshare.mybatis.pager.PageHelp;
import com.taxshare.mybatis.pager.PageRequest;
import com.taxshare.response.beans.Response;
import com.taxshare.seller.entity.AlsDocumentDetailEntity;
import com.taxshare.seller.entity.AlsDocumentEntity;
import com.taxshare.seller.mapper.AlsDocumentDetailMapper;
import com.taxshare.seller.mapper.AlsDocumentMapper;
import com.taxshare.seller.view.dto.AlsDocumentDTO;
import com.taxshare.seller.view.dto.AlsDocumentQueryDTO;
import com.taxshare.tools.util.UUIDUitl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author YANG
 * @date 2021/6/21
 * @Description:ALS单据信息
 */
@Service
@Slf4j
public class AlsDocumentService extends ServiceImpl<AlsDocumentMapper, AlsDocumentEntity> {

    @Autowired
    AlsDocumentDetailMapper alsDocumentDetailMapper;

    /**
     * 同步ALS单据信息
     *
     * @param alsDocumentDTO
     * @return
     */
    public Response syncAlsDocument(AlsDocumentDTO alsDocumentDTO) {
        AlsDocumentEntity alsDocumentEntity = alsDocumentDTO.getDocMain();
        List<AlsDocumentDetailEntity> alsDocumentDetailEntities = alsDocumentDTO.getDocDetail();
        if (alsDocumentEntity != null) {
            QueryWrapper<AlsDocumentEntity> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("doc_id", alsDocumentEntity.getDocId());
            if (baseMapper.selectCount(queryWrapper) > 0) {
                baseMapper.update(alsDocumentEntity, queryWrapper);
            } else {
                alsDocumentEntity.setUuid(UUIDUitl.UUID32(false));
                baseMapper.insert(alsDocumentEntity);
            }
        }
        if (CollectionUtils.isNotEmpty(alsDocumentDetailEntities)) {
            QueryWrapper<AlsDocumentDetailEntity> detailQuery = new QueryWrapper<>();
            detailQuery.eq("doc_id", alsDocumentEntity.getDocId());
            if (alsDocumentDetailMapper.selectCount(detailQuery) > 0) {
                alsDocumentDetailMapper.delete(detailQuery);
            }
            for (AlsDocumentDetailEntity alsDocumentDetailEntity : alsDocumentDetailEntities) {
                alsDocumentDetailEntity.setUuid(UUIDUitl.UUID32(false));
                alsDocumentDetailMapper.insert(alsDocumentDetailEntity);
            }
        }
        return Response.success();
    }

    /**
     * Als主表查询
     * @param query
     * @return
     */
    public Response<IPage<AlsDocumentEntity>> queryAlsDocument(PageRequest<AlsDocumentQueryDTO> query) {
        QueryWrapper<AlsDocumentEntity> queryWrapper = new QueryWrapper<>();
        AlsDocumentQueryDTO alsDocumentQueryDTO = query.getInfo();
        if (StrUtil.isNotBlank(alsDocumentQueryDTO.getDocId())) {
            queryWrapper.eq("doc_id", alsDocumentQueryDTO.getDocId());
        }
        if (StrUtil.isNotBlank(alsDocumentQueryDTO.getSellerName())) {
            queryWrapper.like("seller_name", alsDocumentQueryDTO.getSellerName());
        }
        if (StrUtil.isNotBlank(alsDocumentQueryDTO.getSellerTaxNo())) {
            queryWrapper.eq("seller_tax_no", alsDocumentQueryDTO.getSellerTaxNo());
        }
        if (StrUtil.isNotBlank(alsDocumentQueryDTO.getPurchaserName())) {
            queryWrapper.like("purchaser_name", alsDocumentQueryDTO.getPurchaserName());
        }
        if (StrUtil.isNotBlank(alsDocumentQueryDTO.getPurchaserTaxNo())) {
            queryWrapper.eq("purchaser_tax_no", alsDocumentQueryDTO.getPurchaserTaxNo());
        }
        if (StrUtil.isNotBlank(alsDocumentQueryDTO.getDocType())) {
            queryWrapper.eq("doc_type", alsDocumentQueryDTO.getDocType());
        }
        if (StrUtil.isNotBlank(alsDocumentQueryDTO.getCancelStatus())) {
            queryWrapper.eq("cancel_status", alsDocumentQueryDTO.getCancelStatus());
        }
        queryWrapper.orderByDesc("create_time");
        IPage<AlsDocumentEntity> alsDocumentEntityIPage = PageHelp.siamplePage(this, queryWrapper, query.getPage(), AlsDocumentEntity.class);
        return Response.success(alsDocumentEntityIPage);
    }

    /**
     * Als明细查询
     * @param docId
     * @return
     */
    public Response<List<AlsDocumentDetailEntity>> queryAlsDetail(String docId) {
        QueryWrapper<AlsDocumentDetailEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("doc_id", docId);
        List<AlsDocumentDetailEntity> list = alsDocumentDetailMapper.selectList(queryWrapper);
        return Response.success(list);
    }
}
